home *** CD-ROM | disk | FTP | other *** search
- #pragma pack(1) // leave no extra spaces
- .
- .
- Play_packet plpack; // request packet
- unsigned long start; // starting sector
- unsigned long end; // end sector
- void (_far *strategy)(); // strategy entry
- void (_far *intrpt)(); // interrupt entry
- unsigned char unit; // sub-unit ID
- .
- .
- plpack.p_rh.rh_lth = sizeof plpack; // total lth
- plpack.p_rh.rh_sub_unit = unit;
- plpack.p_rh.rh_cc = 132; // call code
- plpack.p_amode = 0; // high sierra mode
- plpack.p_start = start;
- plpack.p_numb = end - start;
- call_driver(&plpack, strategy, intrpt); // request play
- if (plpack.p_rh.rh_stat & 0x8000)
- { /* error on play */ }
- else
- { /* play started OK */ }
- .
- .
- void call_driver(void *pp,
- void (_far *strat)(),
- void (_far *intr)())
- {
- unsigned long call_strat = (unsigned long) strat;
- unsigned long call_intr = (unsigned long) intr;
- unsigned int packet = (unsigned int) pp;
-
- _asm {
- push ds
- pop es
- mov bx,packet // point es:bx to packet
- call far ptr call_strat // call strategy entry
- call far ptr call_intr // call interrupt
- }
- }
- /* End of File */
-
-